# -*- coding: utf-8 -*-

import sys
sys.path.append('../..')
from common.config import *
from db.mysql import MysqlClient
from itertools import product
import requests, json
from common.helper import Helper



class Spider(object):
    def __init__(self):
        self.mysql = MysqlClient()
        self.name = "粤港澳大湾区跨境医疗保险（澳门版）"

    # 生成产品数据
    def genProductInfo(self):
        plan = {
            # 年龄段
            "year": [str(i) for i in range(0, 56)],
            # 有无社保
            "socialSec": ["Y", "N"],
            # 保障期限
            "expire": ["1年"],
            # 交费类型
            "payType": ["年交"],
            # 赔付比率
            "payRate": ["70%", "80%", "90%", "100%"],
            # 限制赔付金额
            "maxBackMoney": ["6000000"]
        }
        for v in product(plan["year"], plan["socialSec"], plan["expire"], plan["payType"], plan["payRate"],
                         plan["maxBackMoney"]):
            data = Helper.formatProductInfo(plan, v)
            self.mysql.cursor.execute(domain[self.name]["insert_sql"].format(**data))
            self.mysql._conn.commit()
            print(domain[self.name]["insert_sql"].format(**data))

    # 执行爬虫
    def requestJson(self, dt=None):

        data = {"saleItemId": 1517170, "birthDate": "{0}-01-02".format( 2020-int(dt["year"])), "hasSocialSecurity": "1" if dt["socialSec"]=="Y" else "0", "paymentPCT": "term_"+dt["payRate"].replace("%","")+"",
                "premPeriodNumber": "term_1", "policyPeriodNumber": "term_1"}

        payload = json.dumps(data)

        r = requests.post(url=domain[self.name]["url"], headers=domain[self.name]["header"], data=payload)

        if r.status_code == 200 and r.json()["code"] == "200":
            price = r.json()["data"]["totalPermium"]
            data = {
                "name": self.name,
                "price": price,
                "id": dt["id"]
            }
            print( data )
            self.mysql.updatePrice( data )
        else:
            data = {
                "name":self.name,
                "state":3,
                "id":dt["id"]
            }
            self.mysql.updateTask( data )
            print("\n/*产品价格更新失败:%d*/"%dt["id"])

    def main(self):
        while True:
            # 随机领取一条数据
            dt = self.mysql.randTask(self.name)
            if not dt:
                print("产品价格抓取完成~~~")
                return
            # 任务执行状态
            data = {
                "name":self.name,
                "id":dt["id"],
                "state":1
            }
            self.mysql.updateTask( data )
            self.requestJson( dt )
